From: Roger Pau Monné Date: Fri, 4 Sep 2020 09:00:46 +0000 (+0200) Subject: x86/msr: explicitly handle AMD DE_CFG X-Git-Tag: archive/raspbian/4.16.0+51-g0941d6cb-1+rpi1~2^2~42^2~1712 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=4175fd3ccd17face664036fa98e9329aa317f7b6;p=xen.git x86/msr: explicitly handle AMD DE_CFG Report LFENCE_SERIALISE unconditionally for DE_CFG on AMD hardware and silently drop writes. Reported-by: Andrew Cooper Signed-off-by: Roger Pau Monné Reviewed-by: Andrew Cooper --- diff --git a/xen/arch/x86/msr.c b/xen/arch/x86/msr.c index a478b91f23..74bf7d9589 100644 --- a/xen/arch/x86/msr.c +++ b/xen/arch/x86/msr.c @@ -292,6 +292,12 @@ int guest_rdmsr(struct vcpu *v, uint32_t msr, uint64_t *val) *val = msrs->tsc_aux; break; + case MSR_AMD64_DE_CFG: + if ( !(cp->x86_vendor & (X86_VENDOR_AMD | X86_VENDOR_HYGON)) ) + goto gp_fault; + *val = AMD64_DE_CFG_LFENCE_SERIALISE; + break; + case MSR_AMD64_DR0_ADDRESS_MASK: case MSR_AMD64_DR1_ADDRESS_MASK ... MSR_AMD64_DR3_ADDRESS_MASK: if ( !cp->extd.dbext ) @@ -517,6 +523,15 @@ int guest_wrmsr(struct vcpu *v, uint32_t msr, uint64_t val) wrmsr_tsc_aux(val); break; + case MSR_AMD64_DE_CFG: + /* + * OpenBSD 6.7 will panic if writing to DE_CFG triggers a #GP: + * https://www.illumos.org/issues/12998 - drop writes. + */ + if ( !(cp->x86_vendor & (X86_VENDOR_AMD | X86_VENDOR_HYGON)) ) + goto gp_fault; + break; + case MSR_AMD64_DR0_ADDRESS_MASK: case MSR_AMD64_DR1_ADDRESS_MASK ... MSR_AMD64_DR3_ADDRESS_MASK: if ( !cp->extd.dbext || val != (uint32_t)val )